package 设计模式.创建型.工厂模式.简单工厂模式.进一步重构三;


import 设计模式.创建型.工厂模式.简单工厂模式.IRuleConfigParser;
import 设计模式.创建型.工厂模式.简单工厂模式.InvalidRuleConfigException;
import 设计模式.创建型.工厂模式.简单工厂模式.RuleConfig;

/**
 * 我们每次调用 RuleConfigParserFactory 的 createParser() 的时候，都要创建一个新的 parser。
 * 如果 parser 可以复用，为了节省内存和对象创建的时间，我们可以将 parser 事先创建好缓存起来。当调用 createParser() 函数的时候，我们从缓存中取出 parser 对象直接使用。
 *
 */
public class RuleConfigSource {
    public RuleConfig load(String ruleConfigFilePath) throws InvalidRuleConfigException {

        String ruleConfigFileExtension = getFileExtension(ruleConfigFilePath);

        IRuleConfigParser parser = RuleConfigParserFactory.createParser(ruleConfigFileExtension);

        if (parser == null) {
            throw new InvalidRuleConfigException(
                    "Rule config file format is not supported: " + ruleConfigFilePath);
        }

        String configText = "";

        return parser.parse(configText);
    }

    private String getFileExtension(String filePath) {
        //...解析文件名获取扩展名，比如rule.json，返回json
        return "json";
    }
}